#
# "$Id: Makefile 6649 2007-07-11 21:46:42Z mike $"
#
#   API library Makefile for the Common UNIX Printing System (CUPS).
#
#   Copyright 2007 by Apple Inc.
#   Copyright 1997-2006 by Easy Software Products, all rights reserved.
#
#   These coded instructions, statements, and computer programs are the
#   property of Apple Inc. and are protected by Federal copyright
#   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
#   which should have been included with this file.  If this file is
#   file is missing or damaged, see the license at "http://www.cups.org/".
#
#   This file is subject to the Apple OS-Developed Software exception.
#

include ../Makedefs.in

#
# Object files...
#

LIBOBJS	=	\
		adminutil.o \
		array.o \
		attr.o \
		auth.o \
		backchannel.o \
		backend.o \
		custom.o \
		dest.o \
		dir.o \
		emit.o \
		encode.o \
		file.o \
		getifaddrs.o \
		getputfile.o \
		globals.o \
		http.o \
		http-addr.o \
		http-addrlist.o \
		http-support.o \
		ipp.o \
		ipp-support.o \
		langprintf.o \
		language.o \
		localize.o \
		mark.o \
		md5.o \
		md5passwd.o \
		notify.o \
		options.o \
		page.o \
		ppd.o \
		request.o \
		sidechannel.o \
		snprintf.o \
		string.o \
		tempfile.o \
		transcode.o \
		usersys.o \
		util.o
LIB32OBJS	= $(LIBOBJS:.o=.32.o)
LIB64OBJS	= $(LIBOBJS:.o=.64.o)
OBJS	=	\
		$(LIBOBJS) \
		$(LIB32OBJS) \
		$(LIB64OBJS) \
		testadmin.o \
		testarray.o \
		testcups.o \
		testfile.o \
		testhttp.o \
		testi18n.o \
		testipp.o \
		testlang.o \
		testppd.o \
		php_cups_wrap.o


#
# Header files to install...
#

HEADERS	=	\
		adminutil.h \
		array.h \
		backend.h \
		cups.h \
		dir.h \
		file.h \
		http.h \
		i18n.h \
		ipp.h \
		language.h \
		ppd.h \
		sidechannel.h \
		transcode.h


#
# Targets in this directory...
#

TARGETS	=	\
		$(LIBCUPS) \
		$(LIB32CUPS) \
		$(LIB64CUPS) \
		libcups.a \
		testadmin \
		testarray \
		testcups \
		testfile \
		testhttp \
		testi18n \
		testipp \
		testlang \
		testppd


#
# Make all targets...
#

all:	$(TARGETS)


#
# Remove object and target files...
#

clean:
	$(RM) $(OBJS) $(TARGETS)
	$(RM) libcups.so libcups.sl libcups.dylib
	$(RM) -r 32bit 64bit


#
# Update dependencies (without system header dependencies...)
#

depend:
	touch Dependencies.tmp
	makedepend -Y -I.. -fDependencies.tmp $(OBJS:.o=.c) >/dev/null 2>&1
	$(RM) Dependencies
	cp Dependencies.tmp Dependencies
	sed -r -e '1,$$s/^([^.]+)\.o:/\1\.32.o: \1\.c /' Dependencies.tmp >>Dependencies
	sed -r -e '1,$$s/^([^.]+)\.o:/\1\.64.o: \1\.c /' Dependencies.tmp >>Dependencies
	$(RM) Dependencies.tmp


#
# Install object and target files...
#

install:	all installhdrs $(INSTALLSTATIC) $(INSTALL32) $(INSTALL64)
	$(INSTALL_DIR) -m 755 $(LIBDIR)
	$(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
	if test $(LIBCUPS) = "libcups.so.2" -o $(LIBCUPS) = "libcups.sl.2"; then \
		$(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
		$(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
	fi
	if test $(LIBCUPS) = "libcups.2.dylib"; then \
		$(STRIP) -x $(LIBDIR)/$(LIBCUPS); \
		$(RM) $(LIBDIR)/libcups.dylib; \
		$(LN) $(LIBCUPS) $(LIBDIR)/libcups.dylib; \
	fi
	if test "x$(SYMROOT)" != "x"; then \
		$(INSTALL_DIR) $(SYMROOT); \
		for file in $(TARGETS); do \
			cp $$file $(SYMROOT); \
		done \
	fi

installstatic:
	$(INSTALL_DIR) -m 755 $(LIBDIR)
	$(INSTALL_LIB) libcups.a $(LIBDIR)
	$(RANLIB) $(LIBDIR)/libcups.a

installhdrs:
	$(INSTALL_DIR) -m 755 $(INCLUDEDIR)/cups
	for file in $(HEADERS); do \
		$(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \
	done

install32bit:
	$(INSTALL_DIR) -m 755 $(LIB32DIR)
	$(INSTALL_LIB) 32bit/libcups.so.2 $(LIB32DIR)/libcups.so.2
	$(LN) libcups.so.2 $(LIB32DIR)/libcups.so

install64bit:
	$(INSTALL_DIR) -m 755 $(LIB64DIR)
	$(INSTALL_LIB) 64bit/libcups.so.2 $(LIB64DIR)/libcups.so.2
	$(LN) libcups.so.2 $(LIB64DIR)/libcups.so


#
# Uninstall object and target files...
#

uninstall: $(UNINSTALL32) $(UNINSTALL64)
	$(RM) $(LIBDIR)/libcups.2.dylib
	$(RM) $(LIBDIR)/libcups.a
	$(RM) $(LIBDIR)/libcups.dylib
	$(RM) $(LIBDIR)/libcups_s.a
	$(RM) $(LIBDIR)/libcups.sl
	$(RM) $(LIBDIR)/libcups.sl.2
	$(RM) $(LIBDIR)/libcups.so
	$(RM) $(LIBDIR)/libcups.so.2
	-$(RMDIR) $(LIBDIR)
	for file in $(HEADERS); do \
		$(RM) $(INCLUDEDIR)/cups/$$file; \
	done
	-$(RMDIR) $(INCLUDEDIR)/cups

uninstall32bit:
	$(RM) $(LIB32DIR)/libcups.so
	$(RM) $(LIB32DIR)/libcups.so.2
	-$(RMDIR) $(LIB32DIR)

uninstall64bit:
	$(RM) $(LIB64DIR)/libcups.so
	$(RM) $(LIB64DIR)/libcups.so.2
	-$(RMDIR) $(LIB64DIR)


#
# libcups.so.2, libcups.sl.2
#

libcups.so.2 libcups.sl.2:	$(LIBOBJS)
	echo Linking $@...
	$(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
	$(RM) `basename $@ .2`
	$(LN) $@ `basename $@ .2`


#
# 32bit/libcups.so.2
#

32bit/libcups.so.2:	$(LIB32OBJS)
	echo Linking 32-bit $@...
	-mkdir 32bit
	$(DSO) $(ARCH32FLAGS) $(DSO32FLAGS) -o $@ $(LIB32OBJS) $(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
	$(RM) 32bit/libcups.so
	$(LN) libcups.so.2 32bit/libcups.so


#
# 64bit/libcups.so.2
#

64bit/libcups.so.2:	$(LIB64OBJS)
	echo Linking 64-bit $@...
	-mkdir 64bit
	$(DSO) $(ARCH64FLAGS) $(DSO64FLAGS) -o $@ $(LIB64OBJS) $(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
	$(RM) 64bit/libcups.so
	$(LN) libcups.so.2 64bit/libcups.so


#
# libcups.2.dylib
#

libcups.2.dylib:	$(LIBOBJS) $(LIBCUPSORDER)
	echo Linking $@...
	$(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \
		-install_name $(libdir)/$@ \
		-current_version 2.8.0 \
		-compatibility_version 2.0.0 \
		-exported_symbols_list libcups.exp \
		-sectorder __TEXT __text $(LIBCUPSORDER) \
		$(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
	$(RM) libcups.dylib
	$(LN) $@ libcups.dylib


#
# libcups_s.a
#

libcups_s.a:	$(LIBOBJS) libcups_s.exp
	echo Creating $@...
	$(DSO) $(DSOFLAGS) -Wl,-bexport:libcups_s.exp -o libcups_s.o $(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ) -lm
	$(RM) $@
	$(AR) $(ARFLAGS) $@ libcups_s.o


#
# libcups.la
#

libcups.la:    $(LIBOBJS)
	echo Linking $@...
	$(CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \
		-version-info 2:8 $(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# libcups.a
#

libcups.a:	$(LIBOBJS)
	echo Archiving $@...
	$(RM) $@
	$(AR) $(ARFLAGS) $@ $(LIBOBJS)
	$(RANLIB) $@


#
# CUPS language bindings for various scripting languages...
#
# NOTE: Not currently used or functional - see the scripting/php directory
#       for the hand-written bindings...
#

phpcups.so:	$(LIBCUPS) php_cups_wrap.o
	echo Linking $@...
	if test `uname` = Darwin; then \
		DSOFLAGS="-bundle -flat_namespace -undefined suppress"; \
	else \
		DSOFLAGS="$(DSOFLAGS)"; \
	fi; \
	$(DSO) $$DSOFLAGS -o $@ php_cups_wrap.o $(LIBS) `php-config --ldflags --libs`

php_cups_wrap.o:	php_cups_wrap.c
	echo Compiling $<...
	$(CC) $(CFLAGS) `php-config --includes` -c $<
php_cups_wrap.c:	cups.h
	echo Creating $< using SWIG...
	swig -php -o $@ -module cups cups.h


#
# testadmin (dependency on static CUPS library is intentional)
#

testadmin:	testadmin.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testadmin.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# testarray (dependency on static CUPS library is intentional)
#

testarray:	testarray.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testarray.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# testcups (dependency on static CUPS library is intentional)
#

testcups:	testcups.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testcups.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# testfile (dependency on static CUPS library is intentional)
#

testfile:	testfile.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testfile.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# testhttp (dependency on static CUPS library is intentional)
#

testhttp:	testhttp.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testhttp.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# testipp (dependency on static CUPS library is intentional)
#

testipp:	testipp.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testipp.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# testi18n (dependency on static CUPS library is intentional)
#

testi18n:	testi18n.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testi18n.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# testlang (dependency on static CUPS library is intentional)
#

testlang:	testlang.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testlang.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# testppd (dependency on static CUPS library is intentional)
#

testppd:	testppd.o libcups.a
	echo Linking $@...
	$(CC) $(LDFLAGS) -o $@ testppd.o libcups.a \
		$(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)


#
# Automatic API help files...
#

apihelp:
	echo Generating CUPS API help files...
	mxmldoc --section "Programming" --title "Array API" \
		--intro api-array.shtml \
		array.h array.c >../doc/help/api-array.html
	mxmldoc --section "Programming" --title "CUPS API" \
		--intro api-cups.shtml \
		cups.h dest.c getputfile.c language.c notify.c \
		options.c tempfile.c usersys.c \
		util.c >../doc/help/api-cups.html
	mxmldoc --section "Programming" --title "File and Directory APIs" \
		--intro api-filedir.shtml \
		file.h file.c dir.h dir.c >../doc/help/api-filedir.html
	mxmldoc --section "Programming" --title "PPD API" \
		--intro api-ppd.shtml \
		ppd.h attr.c custom.c emit.c localize.c mark.c page.c \
		ppd.c >../doc/help/api-ppd.html
	mxmldoc --section "Programming" --title "HTTP and IPP APIs" \
		--intro api-httpipp.shtml \
		http.h ipp.h auth.c encode.c http.c http-addr.c \
		http-support.c ipp.c ipp-support.c md5passwd.c \
		request.c >../doc/help/api-httpipp.html
	mxmldoc --section "Programming" --title "Filter and Backend APIs" \
		--intro api-filter.shtml \
		backchannel.c sidechannel.c sidechannel.h >../doc/help/api-filter.html


#
# Dependencies...
#

include Dependencies


#
# End of "$Id: Makefile 6649 2007-07-11 21:46:42Z mike $".
#
